package com.br.betelgeuse.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;

/**
 * @author Betelgeuse Team
 */

//@Hibernate: @entity Modelo/classe mapeado como entidade.
@Entity
@Table(name="candidato")
public class Candidato{
	
	/*
	 * @Hibernate: @Column Atributos mapeados como colunas.
	 * @Hibernate: @Id indica primary Key.
	 * @Hibernate: @GeneratedValue indica valor auto-incrementa pelo banco de dados.
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="idCandidato")
	private int idCandidato;

	@Column(name="livro")
	private String livro;
	
	@Column(name="termo")
	private String termo;
	
	@Column(name="folha")
	private String folha;
	
	@Column(name="nomePai")
	private String nomePai;
	
	@Column(name="nomeMae")
	private String nomeMae;
	
	@Column(name="desejaServir")
	private boolean desejaServir;
	
	@Column(name="ensinoSuperior")
	private boolean ensinoSuperior;
	
	@Column(name="filhoUnico")
	private boolean filhoUnico;
	
	@Column(name="arrimoFamilia")
	private boolean arrimoFamilia;
	
	@Column(name="mfdv")
	private boolean mfdv;
	
	@Column(name="religiao")
	private boolean religiao;
	
	@Column(name="deficienciaFisica")
	private boolean deficienciaFisica;
	
	@Column(name="deficienciaMental")
	private boolean deficienciaMental;
	
	@Column(name="cpor")
	private boolean cpor;
	
	@Column(name="npor")
	private boolean npor;
	
	@Column(name="nome")
	private String nome;
	
	@Column(name="sobreNome")
	private String sobreNome;
	
	@Column(name="cpf",unique=true)
	private String cpf;
	
	@Column(name="rg",unique=true)
	private String rg;
	
	@Column(name="dataNascimento")
	private String dataNascimento;
	
	@Column(name="cep")
	private String cep;
	
	@Column(name="cidade")
	private String cidade;
	
	@Column(name="uf")
	private String uf;
	
	@Column(name="endereco")
	private String endereco;
	
	@Column(name="numero")
	private String numero;
	
	@Column(name="complemento")
	private String complemento;
	
	@Column(name="bairro")
	private String bairro;
	
	@Column(name="genero")
	private String genero;
	
	@Column(name="telefone")
	private String telefone;
	
	@Column(name = "anexomfdv")
	@Lob
	private byte[] anexoMFDV;
	
	@Column(name = "anexodeficienciafisica")
	@Lob
	private byte[] anexoDeficienciaFisica;
	
	@Column(name = "anexodeficienciamental")
	@Lob
	private byte[] anexoDeficienciaMental;
	
	@Column(name = "anexoensinosuperior")
	@Lob
	private byte[] anexoEnsinoSuperior;

	//Construtor
	public Candidato() {
	}
	
	//Getters e Setters.
	public int getIdCandidato() {
		return idCandidato;
	}

	public void setIdCandidato(int idCandidato) {
		this.idCandidato = idCandidato;
	}
	
	public String getLivro() {
		return livro;
	}
	
	public void setLivro(String livro) {
		this.livro = livro;
	}
	
	public String getTermo() {
		return termo;
	}
	
	public void setTermo(String termo) {
		this.termo = termo;
	}
	
	public String getFolha() {
		return folha;
	}
	
	public void setFolha(String folha) {
		this.folha = folha;
	}
	
	public String getNomePai() {
		return nomePai;
	}
	
	public void setNomePai(String nomePai) {
		this.nomePai = nomePai.toUpperCase();
	}
	
	public String getNomeMae() {
		return nomeMae;
	}
	
	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae.toUpperCase();
	}
	
	public boolean isDesejaServir() {
		return desejaServir;
	}
	
	public void setDesejaServir(boolean desejaServir) {
		this.desejaServir = desejaServir;
	}
	
	public boolean isEnsinoSuperior() {
		return ensinoSuperior;
	}
	
	public void setEnsinoSuperior(boolean ensinoSuperior) {
		this.ensinoSuperior = ensinoSuperior;
	}
	
	public boolean isFilhoUnico() {
		return filhoUnico;
	}
	
	public void setFilhoUnico(boolean filhoUnico) {
		this.filhoUnico = filhoUnico;
	}
	
	public boolean isArrimoFamilia() {
		return arrimoFamilia;
	}
	
	public void setArrimoFamilia(boolean arrimoFamilia) {
		this.arrimoFamilia = arrimoFamilia;
	}
	
	public boolean isMfdv() {
		return mfdv;
	}
	
	public void setMfdv(boolean mfdv) {
		this.mfdv = mfdv;
	}
	
	public boolean isReligiao() {
		return religiao;
	}
	
	public void setReligiao(boolean religiao) {
		this.religiao = religiao;
	}
	
	public boolean isDeficienciaFisica() {
		return deficienciaFisica;
	}
	
	public void setDeficienciaFisica(boolean deficienciaFisica) {
		this.deficienciaFisica = deficienciaFisica;
	}
	
	public boolean isDeficienciaMental() {
		return deficienciaMental;
	}
	
	public void setDeficienciaMental(boolean deficienciaMental) {
		this.deficienciaMental = deficienciaMental;
	}
	
	public boolean isCpor() {
		return cpor;
	}
	
	public void setCpor(boolean cpor) {
		this.cpor = cpor;
	}
	
	public boolean isNpor() {
		return npor;
	}
	
	public void setNpor(boolean npor) {
		this.npor = npor;
	}
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome.toUpperCase();
	}
	
	public String getSobreNome() {
		return sobreNome;
	}
	
	public void setSobreNome(String sobreNome) {
		this.sobreNome = sobreNome.toUpperCase();
	}
	
	public String getRg() {
		return rg;
	}
	
	public void setRg(String rg) {
		this.rg = removePontuacao(rg);
	}
	
	public String getDataNascimento() {
		return dataNascimento;
	}
	
	public void setDataNascimento(String dataNascimento) {
		this.dataNascimento = dataNascimento;
	}	
	
	public String getCep() {
		return cep;
	}
	
	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCidade() {
		return cidade;
	}
	
	public void setCidade(String cidade) {
		this.cidade = cidade.toUpperCase();
	}
	
	public String getUf() {
		return uf;
	}
	
	public void setUf(String uf) {
		this.uf = uf.toUpperCase();
	}
	
	public String getEndereco() {
		return endereco;
	}
	
	public void setEndereco(String endereco) {
		this.endereco = endereco.toUpperCase();
	}
	
	public String getGenero() {
		return genero;
	}
	
	public void setGenero(String genero) {
		this.genero = genero.toUpperCase();
	}
	
	public String getTelefone() {
		return telefone;
	}
	
	public void setTelefone(String telefone) {
		this.telefone = removePontuacao(telefone);
	}
	
	
	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = removePontuacao(cpf);
	}
	
	public String toString(){
		return ReflectionToStringBuilder.toString(this);
	}
	
	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento.toUpperCase();
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro.toUpperCase();
	}
	
		
	public byte[] getAnexoMFDV() {
		return anexoMFDV;
	}

	public void setAnexoMFDV(byte[] anexoMFDV) {
		this.anexoMFDV = anexoMFDV;
	}

	public byte[] getAnexoDeficienciaFisica() {
		return anexoDeficienciaFisica;
	}

	public void setAnexoDeficienciaFisica(byte[] anexoDeficienciaFisica) {
		this.anexoDeficienciaFisica = anexoDeficienciaFisica;
	}

	public byte[] getAnexoDeficienciaMental() {
		return anexoDeficienciaMental;
	}

	public void setAnexoDeficienciaMental(byte[] anexoDeficienciaMental) {
		this.anexoDeficienciaMental = anexoDeficienciaMental;
	}

	public byte[] getAnexoEnsinoSuperior() {
		return anexoEnsinoSuperior;
	}

	public void setAnexoEnsinoSuperior(byte[] anexoEnsinoSuperior) {
		this.anexoEnsinoSuperior = anexoEnsinoSuperior;
	}

	public void trataModeloDataCadastrar() {
		this.dataNascimento = this.removePontuacao(this.dataNascimento);
		String dia = this.dataNascimento.substring(0, 2);
		String mes = this.dataNascimento.substring(2, 4);
		String ano = this.dataNascimento.substring(4, 8);
		this.dataNascimento = ano+mes+dia;
	}
	
	public void trataModeloDataExibir() {
		this.dataNascimento = this.removePontuacao(this.dataNascimento);
		String ano = this.dataNascimento.substring(0, 4);
		String mes = this.dataNascimento.substring(4, 6);
		String dia = this.dataNascimento.substring(6, 8);
		this.dataNascimento = dia+mes+ano;
	}
	
	private String removePontuacao(String string) {
		string = string.replace(".","");
		string = string.replace("-","");
		string = string.replace("(", "");
		string = string.replace(")", "");
		string = string.replace("/", "");	
		return string;
	}

}
